#自定义绝对值函数
def my_abs(param):
	if param>=0:
		return param;
	else:
		return -param;

print(my_abs(-99));
#print(my_abs('a'));#没有做参数检查

#1,定义一个空函数
def nop():
	pass #pass语句什么都不做，那有什么用？实际上pass可以用来作为占位符，比如现在还没想好怎么写函数的代码，就可以先放一个pass，让代码能运行起来。

#2,对我们写的函数加入参数检查
def my_abs(param):
	if not isinstance(param,(int,float)):
		raise TypeError('bad operand type')
	if param>=0:
		return param
	else:
		return -param
print(my_abs(-100))
#print(my_abs("q")) #加入类型检查以后

print('------函数返回多个值------')
#3,返回多个值
def return_MultipleValue(param1,param2,param3,param4):
	nx = param1+param2*100
	ny = param3*param4+100
	return nx ,ny 

x , y = return_MultipleValue(100,200,300,400)
print(x)
print(y)
print(x,y)

xy = return_MultipleValue(100,200,300,400)
print(xy)



#递归函数(经典案例:n!)
def factorial(n):
	if n<1:
		return 1
	return factorial(n-1)*n

#print(factorial(997))

#尾递归:解决递归调用栈溢出的方法
def factorial(n):
	return factorial_iter(n,1)
	
def factorial_iter(num,product):
	if num ==1:
		return product
	return factorial_iter(num-1,num*product)
	
print(factorial(997))